/***************************************************************************
 *   Copyright (C) 2007 by Andreas Theofilu                                *
 *   andreas@TheoSys.at                                                    *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation version 3 of the License.                *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include <klineedit.h>
#include <kmessagebox.h>
#include <klocale.h>
#include <kdatewidget.h>
#include <kcombobox.h>
#include <knuminput.h>
#include <kfiledialog.h>
#include <qcheckbox.h>
#include <qradiobutton.h>
#include <qdir.h>
#include <qfile.h>

#include <stdlib.h>
  #include <iostream.h>
#include "helper.h"
#include "tilgungsplanwidget.h"
#include "ziaendwidget.h"
#include "ratenplanwidget.h"

tilgungsplanWidget::tilgungsplanWidget ( QWidget* parent, const char* name, WFlags fl )
		: tilgungsplanWidgetBase ( parent,name,fl )
{
	dirty = FALSE;
	mamma = parent;		// Parent window needed to exit application

	// Zuletzt verwendete Maskenparameter aus der Datei holen, sofern
	// es diese Datei bereits gibt.
	readValues();
}

tilgungsplanWidget::~tilgungsplanWidget()
{
QString hdir = QDir::homeDirPath ();
QFile tmpFile;

	if (!dirty)
	   return;

	// Zuletzt verwendete Maskenparameter in eine Datei schreiben.
	hdir.append("/.tilgpars.dat");
	tmpFile.setName(hdir);

	if (tmpFile.open(IO_ReadWrite | IO_Truncate) == FALSE)
	{
	   KMessageBox::error(0, QString("Could not open file for writing: %1").arg(tmpFile.errorString()));
	   return;
	}

	moveValues();
	write (tmpFile.handle(), &TpPars, sizeof(TPPARS));
	tmpFile.close();
}

void tilgungsplanWidget::moveValues()
{
QDate dt;
int ret;

	memset(&TpPars, 0, sizeof(TPPARS));
	// Zuweisen der Inhalte der Widgets zur internen Parameterstruktur.
	TpPars.effformel = 0.0;
	TpPars.gewicht = 0.0;
	TpPars.tageb = comboBox_tageber->currentItem() + 1;

	switch (comboBox_verzart->currentItem())
	{
	   case 0: TpPars.verzart = 0; break;	// Dekursiv
	   case 1: TpPars.verzart = 3; break;	// Antizipativ
	   case 2: TpPars.verzart = 7; break;	// Dekursiv; Zinsen am Beg.d. Absclussp.
	   case 3: TpPars.verzart = 4; break;	// Unverzinst
	}

	TpPars.ratenart = comboBox_Ratart->currentItem();
	TpPars.valuta = comboBox_valuta->currentItem();
	TpPars.zssoll = kDoubleNumInput_Zinssatz->value();
	TpPars.zuschfix = kDoubleNumInput_ZuschFix->value();
	TpPars.zuschprz = kDoubleNumInput_ZiZuschuss->value();
	TpPars.zuschannu = kDoubleNumInput_AnnZuschuss->value();
	dt = kDateWidget_Auszahlung->date();
	TpPars.ragab = make_date(dt.day(), dt.month(), dt.year());
	dt = kDateWidget_Abschluss->date();
	TpPars.abschl = make_date(dt.day(), dt.month(), dt.year());
	TpPars.ultimo = checkBox_RechUltimo->isChecked();
	TpPars.anzraten = kIntNumInput_AnzRaten->value();
	ret = comboBox_Abschl->currentItem();

	switch (ret)
	{
           case 0: TpPars.abschlry = 0; break;
	   case 1: TpPars.abschlry = 1; break;
	   case 2: TpPars.abschlry = 3; break;
	   case 3: TpPars.abschlry = 6; break;
	   case 4: TpPars.abschlry = 12; break;
	   case 5: TpPars.abschlry = 41; break;
	   case 6: TpPars.abschlry = 43; break;
	   case 7: TpPars.abschlry = 46; break;
	   case 8: TpPars.abschlry = 47; break;
	   case 9: TpPars.abschlry = 48; break;
	   case 10: TpPars.abschlry = 52; break;
        }

	TpPars.zuschver = 0;		// wird derzeit nicht verwendet!
	TpPars.spesen = kDoubleNumInput_Fixspesen->value();
	TpPars.kosten = kDoubleNumInput_Kosten->value();
	TpPars.rahmen = kDoubleNumInput_Betrag->value();
	TpPars.kapital = 0.0;
	TpPars.raplan[0] = checkBox_RaJan->isChecked();
	TpPars.raplan[1] = checkBox_RaFeb->isChecked();
	TpPars.raplan[2] = checkBox_RaMar->isChecked();
	TpPars.raplan[3] = checkBox_RaApr->isChecked();
	TpPars.raplan[4] = checkBox_RaMai->isChecked();
	TpPars.raplan[5] = checkBox_RaJun->isChecked();
	TpPars.raplan[6] = checkBox_RaJul->isChecked();
	TpPars.raplan[7] = checkBox_RaAug->isChecked();
	TpPars.raplan[8] = checkBox_RaSep->isChecked();
	TpPars.raplan[9] = checkBox_RaOkt->isChecked();
	TpPars.raplan[10] = checkBox_RaNov->isChecked();
	TpPars.raplan[11] = checkBox_RaDez->isChecked();
	TpPars.rate = kDoubleNumInput_Rate->value();
	dt = kDateWidget_RaVon->date();
	TpPars.dvon = make_date(dt.day(), dt.month(), dt.year());
	dt = kDateWidget_RaBis->date();
	TpPars.dbis = make_date(dt.day(), dt.month(), dt.year());
	dt = kDateWidget_Endfael->date();
	TpPars.endfaell = make_date(dt.day(), dt.month(), dt.year());
	TpPars.runden = checkBox_Runden->isChecked();
	TpPars.mehrfach = FALSE;
	TpPars.laufstop = FALSE;
#ifdef _ZINSAENDERUNG
	TpPars.ziaend = checkBox_ZiChange->isChecked();
#else
	TpPars.ziaend = FALSE;
#endif
	TpPars.effekt = FALSE;
	TpPars.fixrate = checkBox_Rate->isChecked();
}

void tilgungsplanWidget::readValues(const char *fname, BOOL home)
{
QDate dt;
QString hdir = QDir::homeDirPath ();
QFile tmpFile;
int fd, day, mon, year;

	// Zuletzt verwendete Maskenparameter aus der Datei holen, sofern
	// es diese Datei bereits gibt.
	if (home)
	{
	   hdir = QDir::homeDirPath();
	   hdir.append(fname);
	}
	else
	   hdir = QString(fname);

	tmpFile.setName(hdir);

	if (tmpFile.open(IO_ReadOnly) == FALSE)
	{
	   // Maske mit sinnvollen Parametern versorgen
	   comboBox_tageber->setCurrentItem(3);
	   comboBox_Ratart->setCurrentItem(1);
	   comboBox_Abschl->setCurrentItem(10);
	   kDoubleNumInput_Zinssatz->setValue(5.5);
	   kDateWidget_Auszahlung->setDate(QDate::currentDate());
	   // Datum: Der 5. des nächsten Monats
	   dt = QDate::currentDate();
	   dt = dt.addMonths(1);
	   dt.setYMD(dt.year(), dt.month(), 5);
	   kDateWidget_RaVon->setDate(dt);
	   dt = dt.addYears(1);
	   kDateWidget_RaBis->setDate(dt);
	   kDateWidget_ZiGiltAb->setDate(QDate::currentDate());
	   kDoubleNumInput_Betrag->setValue(100000.0);
	   checkBox_RaJan->setChecked(TRUE);
	   checkBox_RaFeb->setChecked(TRUE);
	   checkBox_RaMar->setChecked(TRUE);
	   checkBox_RaApr->setChecked(TRUE);
	   checkBox_RaMai->setChecked(TRUE);
	   checkBox_RaJun->setChecked(TRUE);
	   checkBox_RaJul->setChecked(TRUE);
	   checkBox_RaAug->setChecked(TRUE);
	   checkBox_RaSep->setChecked(TRUE);
	   checkBox_RaOkt->setChecked(TRUE);
	   checkBox_RaNov->setChecked(TRUE);
	   checkBox_RaDez->setChecked(TRUE);
#ifndef _ZINSAENDERUNG
	   checkBox_ZiChange->setProperty("enabled", QVariant("FALSE"));
#endif
	   return;
	}

	fd = tmpFile.handle();
	read (fd, &TpPars, sizeof(TPPARS));
	tmpFile.close();
	kDoubleNumInput_Betrag->setValue(TpPars.rahmen);
	kDoubleNumInput_Kosten->setValue(TpPars.kosten);
	date_int(&day, &mon, &year, TpPars.ragab);
	dt.setYMD(year, mon, day);
	kDateWidget_Auszahlung->setDate(dt);
	comboBox_tageber->setCurrentItem(TpPars.tageb-1);

	switch (TpPars.verzart)
	{
	   case 0: comboBox_verzart->setCurrentItem(0); break;
	   case 3: comboBox_verzart->setCurrentItem(1); break;
	   case 7: comboBox_verzart->setCurrentItem(2); break;
	   case 4: comboBox_verzart->setCurrentItem(3); break;
	}

	kDoubleNumInput_Fixspesen->setValue(TpPars.spesen);
	kDoubleNumInput_Zinssatz->setValue(TpPars.zssoll);
#ifdef _ZINSAENDERUNG
	checkBox_ZiChange->setChecked(TpPars.ziaend);
#else
	checkBox_ZiChange->setProperty("enabled", QVariant("FALSE"));
#endif
	date_int(&day, &mon, &year, TpPars.ragab);
	dt.setYMD(year, mon, day);
	kDateWidget_ZiGiltAb->setDate(dt);		// Dummy!
	checkBox_RechUltimo->setChecked(TpPars.ultimo);
	kDoubleNumInput_ZiZuschuss->setValue(TpPars.zuschprz);
	kDoubleNumInput_ZuschFix->setValue(TpPars.zuschfix);

	if (TpPars.zuschprz > 0.0)
	{
	   radioButton_ZuschP->setChecked(TRUE);
	   radioButton_ZuschF->setChecked(FALSE);
	}
	else
	{
	   radioButton_ZuschP->setChecked(FALSE);
	   radioButton_ZuschF->setChecked(TRUE);
	}

	kDoubleNumInput_AnnZuschuss->setValue(TpPars.zuschannu);
	checkBox_Runden->setChecked(TpPars.runden);
	kIntNumInput_AnzRaten->setValue(TpPars.anzraten);
	kDoubleNumInput_Rate->setValue(TpPars.rate);
	date_int(&day, &mon, &year, TpPars.endfaell);
	dt.setYMD(year, mon, day);
	kDateWidget_Endfael->setDate(dt);
	date_int(&day, &mon, &year, TpPars.dvon);
	dt.setYMD(year, mon, day);
	kDateWidget_RaVon->setDate(dt);
	checkBox_Rate->setChecked(TpPars.fixrate);
	comboBox_Ratart->setCurrentItem(TpPars.ratenart);
	checkBox_RaJan->setChecked(TpPars.raplan[0]);
	checkBox_RaFeb->setChecked(TpPars.raplan[1]);
	checkBox_RaMar->setChecked(TpPars.raplan[2]);
	checkBox_RaApr->setChecked(TpPars.raplan[3]);
	checkBox_RaMai->setChecked(TpPars.raplan[4]);
	checkBox_RaJun->setChecked(TpPars.raplan[5]);
	checkBox_RaJul->setChecked(TpPars.raplan[6]);
	checkBox_RaAug->setChecked(TpPars.raplan[7]);
	checkBox_RaSep->setChecked(TpPars.raplan[8]);
	checkBox_RaOkt->setChecked(TpPars.raplan[9]);
	checkBox_RaNov->setChecked(TpPars.raplan[10]);
	checkBox_RaDez->setChecked(TpPars.raplan[11]);
	date_int(&day, &mon, &year, TpPars.dbis);
	dt.setYMD(year, mon, day);
	kDateWidget_RaBis->setDate(dt);
	comboBox_valuta->setCurrentItem(TpPars.valuta);

	switch (TpPars.abschlry)
	{
	   case 0: comboBox_Abschl->setCurrentItem(0); break;
	   case 1: comboBox_Abschl->setCurrentItem(1); break;
	   case 3: comboBox_Abschl->setCurrentItem(2); break;
	   case 6: comboBox_Abschl->setCurrentItem(3); break;
	   case 12: comboBox_Abschl->setCurrentItem(4); break;
	   case 41: comboBox_Abschl->setCurrentItem(5); break;
	   case 43: comboBox_Abschl->setCurrentItem(6); break;
	   case 46: comboBox_Abschl->setCurrentItem(7); break;
	   case 47: comboBox_Abschl->setCurrentItem(8); break;
	   case 48: comboBox_Abschl->setCurrentItem(9); break;
	   case 52: comboBox_Abschl->setCurrentItem(10); break;
	}

	date_int (&day, &mon, &year, TpPars.abschl);
	dt.setYMD(year, mon, day);
	kDateWidget_Abschluss->setDate(dt);
}

/*$SPECIALIZATION$*/
void tilgungsplanWidget::mnCalcTPSumSlot()
{
QDate dt, dt1;
QString str, zia;
TRech *tp;
int ret, day1, day2, mon1, mon2, year1, year2;
char hv0[255];
double ezins, rate;
TPPARS pars;

	// Zuweisen der Inhalte der Widgets zur internen Parameterstruktur.
	moveValues();

	if (TpPars.dbis > TpPars.endfaell)
	   TpPars.endfaell = TpPars.dbis;

	if (TpPars.fixrate)
	{
	   TpPars.endfaell = 0L;
	   TpPars.dbis = 0L;
	}

	// Parameter für spätere Effektivzinsberechnung wegspeichern
	memmove (&pars, &TpPars, sizeof(TPPARS));

	// Berechnung anstossen
	tp = new TRech (&TpPars);

	if ((ret = tp->tilgpl()) != 0)
	{
	   switch (ret)
	   {
	      case 1: str = QString::fromUtf8("Fehler beim Erzeugen einer Temporärdatei!"); break;
	      case 2: str = QString::fromUtf8("Erste Einschränkung nicht vorhanden!"); break;
	      case 3:
		 date_int (&day1, &mon1, &year1, TpPars.ragab);
		 date_int (&day2, &mon2, &year2, TpPars.dvon);
		 sprintf (hv0, "Das Auszahlungsdatum (%02d.%02d.%d) muss kleiner als das Datum der ersten Einschränkung sein (%02d.%02d.%d)!",
			day1, mon1, year1, day2, mon2, year2);
		 str = QString::fromUtf8(hv0); break;
	      case 4:
		 date_int (&day1, &mon1, &year1, TpPars.abschl);
		 date_int (&day2, &mon2, &year2, TpPars.ragab);
		 sprintf (hv0, "Das Abschlussdatum (%02d.%02d.%d) darf nicht kleiner als das Auszahlungsdatum (%02d, %02d.%d) sein!",
			day1, mon1, year1, day2, mon2, year2);
		 str = QString::fromUtf8(hv0); break;
	      case 5:
		 date_int (&day1, &mon1, &year1, TpPars.dvon);
		 date_int (&day2, &mon2, &year2, TpPars.dbis);
		 sprintf (hv0, "Die erste Einschränkung (%02d.%02d.%d) darf nicht größer als die letzte Einschränkung (%02d.%02d.%d) sein!",
			day1, mon1, year1, day2, mon2, year2);
		 str = QString::fromUtf8(hv0); break;
	      case 6:
		 date_int (&day1, &mon1, &year1, TpPars.dbis);
		 date_int (&day2, &mon2, &year2, TpPars.endfaell);
		 sprintf (hv0, "Die letzte Einschränkung (%02d.%02d.%d) darf nicht größer die Endfälligkeit (%02d.%02d.%d) sein!",
			day1, mon1, year1, day2, mon2, year2);
		 str = QString::fromUtf8(hv0); break;
	      case 7: str = QString::fromUtf8("Es wurde keine Rate angegeben!"); break;
	      case 8: str = QString::fromUtf8("Kein, oder ungültiges Auszahlungsdatum!"); break;
	      case 9: str = QString::fromUtf8("Die Verzinsung in Bezug auf den Abschlussrythmus ist ungültig!"); break;
	      case 10: str = QString::fromUtf8("Das Abschlussdatum fehlt oder ist ungültig!"); break;
	      case 11:
		 sprintf(hv0, "Der Abschlussrythmus ist ungültig! (%d)",TpPars.abschlry);
		 str = QString::fromUtf8(hv0); break;
	      case 12: str = QString::fromUtf8("Die Verzinsungsart ist ungültig!"); break;
	      case 13: str = QString::fromUtf8("Die Ratenart ist ungültig!"); break;
	      case 14: str = QString::fromUtf8("Die Laufzeit ist über 100 Jahre!"); break;
	      case 15: str = QString::fromUtf8("Es wurde keine Rate vorgegeben!"); break;
	      case 16: str = QString::fromUtf8("Die vorgegebene Rate darf nicht kleiner als 0 sein!"); break;
	      case 18: str = QString::fromUtf8("Die erste Einschränkung oder die Ratenleiste ist ungültig!"); break;
	      case 19: str = QString::fromUtf8("Die letzte Einschränkung oder die Ratenleiste ist ungültig!"); break;
	      case 20: str = QString::fromUtf8("Interner Rechenfehler!"); break;
	      case 22: str = QString::fromUtf8("Nicht genügend Speicher!"); break;
	      case 23: str = QString::fromUtf8("\"Antizipativ\" erlaubt keine Zinssatzänderung!"); break;
	      case 24: 
	      case 25: str = QString::fromUtf8("Fehler beim Lesen der Zinssatzänderungen!"); break;
	      case 26: str = QString::fromUtf8("Interner Fehler bei der Effektivzinsberechnung! Der Abschlussrhythmus muss jährlich sein!"); break;
	      case 27: str = QString::fromUtf8("Interner Fehler bei der Effektivzinsberechnung! Die Laufzeit muss genau 1 Jahr betragen!"); break;
	      case 28: str = QString::fromUtf8("Eine Effektivzinsberechnung ist bei <b>dekursiver</b> Verzinsung möglich!"); break;
	      case 29: str = QString::fromUtf8("Für die Effektivzinsberechnung muss eine Rate größer 0 angegeben werden!"); break;
	      default:
//		 sprintf (hv0, "Unbekannter Fehler \"%d\"! Prüfen Sie die Eingaben.", ret);
	         str = QString("Unbekannter Fehler \"%1\"! Prüfen Sie die Eingaben.").arg(ret);
	   }

	   KMessageBox::error(0, str, i18n("Fehler"));
	   lineEdit_EffZi->clear();
	   lineEdit_GesBelast->clear();
	   lineEdit_ErgRate->clear();
	   lineEdit_ErgLRate->clear();
	   lineEdit_ErgZinsen->clear();
	   lineEdit_ErgZiZusch->clear();
	   lineEdit_ErgAnnZusch->clear();
	   lineEdit_ErgSumAnnZusch->clear();
	   delete tp;
	   return;
	}
/*
	if (TpPars.effformel > 0.0)
	   PointNumber(TpPars.effformel, 3, &hv0[0]);
	else
	   PointNumber(TpPars.gewicht, 3, &hv0[0]);

	lineEdit_EffZi->clear();
	lineEdit_EffZi->insert(hv0);
*/
	PointNumber(TpPars.gesamt, 2, &hv0[0]);
	lineEdit_GesBelast->clear();
	lineEdit_GesBelast->insert(hv0);

	kIntNumInput_AnzRaten->setValue(TpPars.anzraten);
	
	date_int(&day1, &mon1, &year1, TpPars.dbis);
	dt.setYMD(year1, mon1, day1);
	kDateWidget_RaBis->setDate(dt);
	
	date_int(&day1, &mon1, &year1, TpPars.endfaell);
	dt.setYMD(year1, mon1, day1);
	kDateWidget_Endfael->setDate(dt);

	rate = TpPars.ergrate;
	PointNumber(TpPars.ergrate, 2, hv0);
	lineEdit_ErgRate->clear();
	lineEdit_ErgRate->insert(hv0);

	PointNumber(TpPars.lrate, 2, hv0);
	lineEdit_ErgLRate->clear();
	lineEdit_ErgLRate->insert(hv0);

	PointNumber(TpPars.ezins, 2, hv0);
	lineEdit_ErgZinsen->clear();
	lineEdit_ErgZinsen->insert(hv0);

	PointNumber(TpPars.zuschuss, 2, hv0);
	lineEdit_ErgZiZusch->clear();
	lineEdit_ErgZiZusch->insert(hv0);

	PointNumber(TpPars.anzuschuss, 2, hv0);
	lineEdit_ErgAnnZusch->clear();
	lineEdit_ErgAnnZusch->insert(hv0);

	PointNumber(TpPars.antotal, 2, hv0);
	lineEdit_ErgSumAnnZusch->clear();
	lineEdit_ErgSumAnnZusch->insert(hv0);

	// Effektivzinssatz berechnen
	pars.effekt = false;
	pars.zuschfix = 0.0;
	pars.zuschprz = 0.0;
	pars.zuschannu = 0.0;
	pars.ergrate = 0.0;
	pars.lrate = 0.0;
	pars.ezins = 0.0;
	pars.zuschuss = 0.0;
	pars.gewicht = 0.0;
	pars.kosten = 0.0;

/*	if (TpPars.abschlry > 40)
	   pars.abschlry = 52;
	else
	   pars.abschlry = 12;
*/
	pars.spesen = 0.0;
	pars.rate = TpPars.ergrate;
	pars.endfaell = 0L;
	pars.fixrate = TRUE;
	pars.ziaend = FALSE;
	pars.zssoll = TpPars.zssoll - 1.0;
	int i = 0;

	// Der Zinssatz kann nur ermittelt werden, in dem mittels Iteration
	// jener Zinssatz gefunden wird, bei dem das errechnete Endkapital
	// dem echten am naechsten kommt.
	while (i < 10000 && pars.gesamt <= TpPars.gesamt)
	{
	   pars.zssoll += 0.001;
	   pars.gesamt = 0.0;

	   tp->setPars(&pars);

	   if ((ret = tp->tilgpl()) != 0)
	   {
	      KMessageBox::error(0, QString("Interner Fehler \"%1\"!").arg(ret), i18n("Fehler"));
	      delete tp;
	      return;
	   }

	   pars.ezins = pars.zssoll;
	   i++;
	}

	if (i >= 10000)
	   pars.ezins = 0.0;

//	PointNumber(pars.effformel, 3, &hv0[0]);
	PointNumber(pars.ezins, 3, &hv0[0]);
	lineEdit_EffZi->clear();
	lineEdit_EffZi->insert(hv0);
/*
KMessageBox::information(this, QString("O-EZins: %1\nN-EZins: %2\nGesamt1: %3\nGesamt2: %4")
	.arg(TpPars.ezins)
	.arg(pars.ezins)
	.arg(TpPars.gesamt)
	.arg(pars.gesamt));
*/
	delete tp;
}

void tilgungsplanWidget::txRaDezSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaNovSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaOktSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaSepSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaAugSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaJulSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaJunSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaMaiSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaMarSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaFebSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaJanSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txRaAprSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txGesBelastSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::txEffZiSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::intAnzRatenSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numAnnZuschSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::dtZiGiltAbSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::dtRaVonSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::dtRaBisSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::dtEndfaelSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::dtAuszahlSlot()
{
	kDateWidget_ZiGiltAb->setDate(kDateWidget_Auszahlung->date());
	dirty = TRUE;
}

void tilgungsplanWidget::dtAbschlussSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::lbRatartSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::cbZiChangeSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::cbUltimoSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::cbRateSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::mnCalcTPSlot()
{
ratenplanWidget *dlg = new ratenplanWidget(this, "ratenplanWidgetBase", TRUE, 0);

	dlg->exec();
	delete dlg;
}

void tilgungsplanWidget::mnInputZiSlot()
{
#ifdef _ZINSAENDERUNG
ziaendWidget *dlg = new ziaendWidget(this, "ziaendWidgetBase", TRUE, 0);

	dlg->exec();
	delete dlg;
#else
	KMessageBox::information(0, i18n("This module was omitted at compile time! To activate it, define \"_ZINSAENDERUNG\" globaly and recompile the program."));
#endif
}

void tilgungsplanWidget::lbVerzartSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::lbTageberSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numZuzaehlSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numBeaGebSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numZisatzSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numZiZuschSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numRateSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numFixspesenSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::rbZuschPSlot()
{
	if (radioButton_ZuschP->isChecked())
	{
	   kDoubleNumInput_ZiZuschuss->setProperty("enabled", QVariant("TRUE"));
	   kDoubleNumInput_ZuschFix->setProperty("enabled", QVariant("FALSE"));
	   radioButton_ZuschF->setChecked(FALSE);
	}
	else
	{
	   kDoubleNumInput_ZiZuschuss->setProperty("enabled", QVariant("FALSE"));
	   kDoubleNumInput_ZuschFix->setProperty("enabled", QVariant("TRUE"));
	   radioButton_ZuschF->setChecked(TRUE);
	}
}

void tilgungsplanWidget::rbZuschFSlot()
{
	if (radioButton_ZuschF->isChecked())
	{
	   kDoubleNumInput_ZiZuschuss->setProperty("enabled", QVariant("FALSE"));
	   kDoubleNumInput_ZuschFix->setProperty("enabled", QVariant("TRUE"));
	   radioButton_ZuschP->setChecked(FALSE);
	}
	else
	{
	   kDoubleNumInput_ZiZuschuss->setProperty("enabled", QVariant("TRUE"));
	   kDoubleNumInput_ZuschFix->setProperty("enabled", QVariant("FALSE"));
	   radioButton_ZuschP->setChecked(TRUE);
	}
}

void tilgungsplanWidget::cbRundenSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numBetragSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::numKostenSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::helpAbout()
{}

void tilgungsplanWidget::helpContents()
{}

void tilgungsplanWidget::helpIndex()
{}

void tilgungsplanWidget::editFind()
{}

void tilgungsplanWidget::editPaste()
{}

void tilgungsplanWidget::editCopy()
{}

void tilgungsplanWidget::editCut()
{}

void tilgungsplanWidget::editRedo()
{}

void tilgungsplanWidget::editUndo()
{}

void tilgungsplanWidget::fileExit()
{
	mamma->close();
}

void tilgungsplanWidget::filePrint()
{}

void tilgungsplanWidget::fileSaveAs()
{
QString fname = KFileDialog::getSaveFileName(QString("tilgpars.dat"), QString("*.dat"), this, QString("Tilgungsplan"));
QFile tmpFile;

	if (fname.isEmpty())
	   return;

	tmpFile.setName(fname);

	if (tmpFile.open(IO_ReadWrite | IO_Truncate) == FALSE)
	{
	   KMessageBox::error(0, QString("Could not open file for writing: %1").arg(tmpFile.errorString()));
	   return;
	}

	moveValues();
	write (tmpFile.handle(), &TpPars, sizeof(TPPARS));
	tmpFile.close();
}

void tilgungsplanWidget::fileSave()
{
QString hdir = QDir::homeDirPath ();
QFile tmpFile;

	if (!dirty)
	   return;

	// Zuletzt verwendete Maskenparameter in eine Datei schreiben.
	hdir.append("/.tilgpars.dat");
	tmpFile.setName(hdir);

	if (tmpFile.open(IO_ReadWrite | IO_Truncate) == FALSE)
	{
	   KMessageBox::error(0, QString("Could not open file for writing: %1").arg(tmpFile.errorString()));
	   return;
	}

	moveValues();
	write (tmpFile.handle(), &TpPars, sizeof(TPPARS));
	tmpFile.close();
	KMessageBox::information(this, i18n("Die Daten der Eingabemaske wurden erfolgreich gespeichert."));
}

void tilgungsplanWidget::fileOpen()
{
QString fname = KFileDialog::getOpenFileName(QString::null, QString("*.dat"), this, QString("Tilgungsplan"));

	if (fname.isEmpty())
	   return;

	readValues(fname.ascii());
}

void tilgungsplanWidget::fileNew()
{}

void tilgungsplanWidget::lbValutaSlot()
{
	dirty = TRUE;
}

void tilgungsplanWidget::cbAbschlSlot()
{
int item = comboBox_Abschl->currentItem();
char hv0[256];

	switch (item)
	{
           case 0: TpPars.abschlry = 0; break;
	   case 1: TpPars.abschlry = 1; break;
	   case 2: TpPars.abschlry = 3; break;
	   case 3: TpPars.abschlry = 6; break;
	   case 4: TpPars.abschlry = 12; break;
	   case 5: TpPars.abschlry = 41; break;
	   case 6: TpPars.abschlry = 43; break;
	   case 7: TpPars.abschlry = 46; break;
	   case 8: TpPars.abschlry = 47; break;
	   case 9: TpPars.abschlry = 48; break;
	   case 10: TpPars.abschlry = 52; break;
	   default:
	      sprintf (hv0, "Gewähltes Item: %d", item);
	      KMessageBox::information(0, i18n(hv0));
	}

	dirty = TRUE;
}

#include "tilgungsplanwidget.moc"

